Cognito カスタムドメインを Route 53 に エイリアスレコードとして登録する方法
Cognito でカスタムドメインを作成すると以下のように、「DNS レコードに CNAME レコードを追加する必要があります」と表示されます。
この案内にしたがって CNAME レコードを登録している方も多いのではないかと思いますが、Route 53 には独自にエイリアスレコードという仕組みがあり、Route 53 を使っているならエイリアスレコードを使用することで以下のメリットを享受できます。
- エイリアスレコードの方が名前解決が早い
- エイリアスレコードは外部的には A レコードとして振る舞うので、直接 IP アドレスを返します
- CNAME だと解決先のドメインに対しさらに名前解決が必要になります
- エイリアスレコードの名前解決は無料
- AWS リソースに対するエイリアスクエリは課金対象外です
- 標準クエリのクエリ料金は以下の通りです(執筆時点。詳細はこちら)
- 100 万件のクエリあたり 0.40 USD (最初の 10 億件のクエリ/月)
- 100 万件のクエリあたり 0.20 USD (10 億件超のクエリ/月)
- エイリアスレコードはゾーンと同名のドメインを使用できる
- CNAME レコードで使用するドメインはゾーン内で1つしか存在できないため、NS レコードとの重複もできません
この記事では Cognito のカスタムドメインを Route 53 にエイリアスレコードとして登録する方法を紹介します。
AWS マネジメントコンソールで設定する方法
カスタムドメインを作成するとエイリアスターゲットとして dx9mbtxxxxxxx.cloudfront.net
のような CloudFront の URL が発行されますのでコピーしておきます。
次に Route 53 のゾーン内で、レコードの作成を行います。
レコードタイプは A を選択した状態で、エイリアスのチェックを入れることでエイリアスレコードを設定できるようになります。
トラフィックのルーティング先では、「CloudFront ディストリビューションへのエイリアス」を選択します。
ディストリビューションの選択のプルダウンに URL は出てきませんが、直接 URL を貼り付けることができますので、Cognito のカスタムドメインを作成した際のエイリアスターゲットの URL を貼り付けましょう。
最後にレコードを作成ボタンを押し、作成します。
これでエイリアスレコードとして設定が完了しました。
CloudFormation で設定する方法
この Cognito カスタムドメインを Route 53 にエイリアスレコードとして登録する方法は CloudFormation でも実現できます。
以下は既存の Cognito ユーザープールに対し、カスタムドメインを設定し、Route 53 へエイリアスレコードを設定する CloudFormation テンプレートになります。
ユーザープール ID やカスタムドメイン用 ACM (us-east-1)、エイリアスレコードを作成するホストゾーン ID はダミーです。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
CognitoUserPoolDomain:
Type: AWS::Cognito::UserPoolDomain
Properties:
Domain: "cognito.example.info"
UserPoolId: "target-user-pool-id"
CustomDomainConfig:
CertificateArn: "arn:aws:acm:us-east-1:12345678901:certificate/12a34b56-xxx-xxxx-xxxx-xxxxxxxxxxxx"
ARecordSet:
Type: "AWS::Route53::RecordSet"
Properties:
HostedZoneId: "ZTARGETHOSTEDZONEID"
Name: "cognito.example.info"
Type: "A"
AliasTarget:
HostedZoneId: "Z2FDTNDATAQYW2"
DNSName: !GetAtt "CognitoUserPoolDomain.CloudFrontDistribution"
ここで重要なのが、AliasTarget
の HostedZoneId
を固定にしている箇所です。
AliasTarget:
HostedZoneId: "Z2FDTNDATAQYW2"
DNSName: !GetAtt "CognitoUserPoolDomain.CloudFrontDistribution"
この Z2FDTNDATAQYW2
は CloudFront のホストゾーン ID を指します。 AWS マネジメントコンソール上で設定する際に、「CloudFront ディストリビューションへのエイリアス」を選択していましたが、値としてはこれが使われます。
上記の CloudFormation テンプレートをデプロイすれば、エイリアスレコードとして登録できます。
最後に
以上がCognito カスタムドメインを Route 53 にエイリアスレコードとして設定する方法になります。
エイリアスレコードとして設定することで上述のメリットを享受できるので、Route 53 を使っているけど CNAME で設定してしまっている方は今からでもエイリアスレコードに変更してみてはいかがでしょうか。